package cn.cqnu.utils;


import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * bean复制util
 *
 * @author Wei
 * @date 2024/01/19
 */
public class BeanCopyUtil {


    //    工具类私有构造方法
    private BeanCopyUtil(){}


    /**
     * 一个原对象和目标类字节码对象
     * 拷贝后返回一个目标对象
     *
     * @param source 来源
     * @param target 目标类
     * @return {@link T}
     */
    public static  <T> T copyBean(Object source, Class<T> target){
        if(source==null){
            return null;
        }
        T t = null;
        try {
            t = target.getDeclaredConstructor().newInstance();
            BeanUtils.copyProperties(source, t);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }


    public static <T> List<T> copyList(List sourceList, Class<T> target){
        ArrayList<T> res = new ArrayList<>();
        sourceList.stream().forEach(e->{
            res.add(copyBean(e, target));
        });

        return res;
    }

}
